﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Entities;
using BusinessLogicLayer.Validation;
using DataAccessLayer;

namespace BusinessLogicLayer
{
    public class ThoiKhoaBieuManager : IValidation<ThoiKhoaBieu>
    {
        private readonly IRepository<ThoiKhoaBieu> _repository;
        public ThoiKhoaBieuManager(IRepository<ThoiKhoaBieu> itr)
        {
            _repository = itr;
        }

        public ValidationResult Validate(ThoiKhoaBieu thoikb)
        {
            var vResult = new ValidationResult();

            if (string.IsNullOrEmpty(thoikb.MaTKB.ToString().Trim()))
                vResult.Messages.Add("Mã Thời khóa biểu phải khác chuỗi rỗng");          

            if (thoikb.MaLop == "------- All ------")
                vResult.Messages.Add("Mã lớp phải khác chuỗi rỗng");

            if (string.IsNullOrEmpty(thoikb.MaMH.ToString().Trim()))
                vResult.Messages.Add("Mã môn học phải khác chuỗi rỗng");

            if (string.IsNullOrEmpty(thoikb.MaGV.ToString().Trim()))
                vResult.Messages.Add("Mã giao viên phải khác chuỗi rỗng");

            if (string.IsNullOrEmpty(thoikb.Tuan.ToString().Trim()) || thoikb.Tuan<0 || thoikb.Tuan>53)
                vResult.Messages.Add("Tuần phải lớn hơn 0 và nhỏ hơn 53");

            if (string.IsNullOrEmpty(thoikb.Thu.ToString().Trim()))
                vResult.Messages.Add("Thứ trong tuần phải khác chuỗi rỗng");

            if (string.IsNullOrEmpty(thoikb.Tiet.ToString().Trim()))
                vResult.Messages.Add("Tiết học phải khác chuỗi rỗng");

            if (string.IsNullOrEmpty(thoikb.Phong.ToString().Trim()))
                vResult.Messages.Add("Phòng học phải khác chuỗi rỗng");

            return vResult;
        }
        public ActionResultAsList<ThoiKhoaBieu> Find(Expression<Func<ThoiKhoaBieu, bool>> predicate)
        {
            var aResult = new ActionResultAsList<ThoiKhoaBieu>();
            try
            {
                aResult.Result = _repository.Find(predicate).ToList();
                if (aResult.Result.Count == 0)
                    aResult.ex.Add(new Exception("Không tìm thấy môn học thỏa điều kiện"));
            }
            catch (Exception ex)
            {
                aResult.ex.Add(ex);
            }
            return aResult;
        }
        public ActionResult Delete(ThoiKhoaBieu thoikb)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.Delete(thoikb))
                    aResult.ex.Add(new Exception("Xóa thông tin môn học không thành công"));
            }
            catch (Exception ex)
            {
                aResult.ex.Add(ex);
            }
            return aResult;
        }

        public ActionResult Delete(string thoikbID)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.Delete(t => t.MaTKB == thoikbID))
                    aResult.ex.Add(new Exception("Xóa thông tin môn học không thành công"));
            }
            catch (Exception ex)
            {
                aResult.ex.Add(ex);
            }
            return aResult;
        }
        public ActionResult InsertOrUpdate(ThoiKhoaBieu tkb)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.InsertOrUpdate(tkb))
                    aResult.ex.Add(new Exception("Thêm mới môn học không thành công"));
            }
            catch (Exception ex)
            {
                aResult.ex.Add(ex);
            }
            return aResult;
        }

        
    }
}
